// PLC工具函数，用于基础控制和分组控制面板的复用

/**
 * 过滤出有效的变量（地址不为空）
 * @param {Array} variables 变量数组
 * @returns {Array} 有效变量数组
 */
export const filterValidVariables = (variables) => {
  return variables.filter(v => {
    return v && v.address && typeof v.address === 'string' && v.address.trim() !== '';
  });
};

/**
 * 准备写入值
 * @param {*} value 原始值
 * @returns {*} 处理后的值
 */
export const prepareWriteValue = (value) => {
  return value !== undefined && value !== null ? value : '';
};

/**
 * 检查变量是否为布尔类型
 * @param {string} address 变量地址
 * @param {Object} variableTypes 变量类型映射（可选）
 * @returns {boolean} 是否为布尔类型
 */
export const isBooleanType = (address, variableTypes = {}) => {
  if (!address) return false;
  
  // 检查variableTypes中存储的类型信息
  const type = variableTypes[address];
  if (type) {
    return type.toUpperCase() === 'BOOL';
  }
  
  // 如果没有类型信息，根据地址特征判断
  return address.toUpperCase().includes('X') || address.toLowerCase().includes('bool');
};

/**
 * 显示读取值
 * @param {string} address 变量地址
 * @param {Object} readResults 读取结果
 * @returns {string} 显示的值
 */
export const displayReadValue = (address, readResults) => {
  if (!address) return '-';
  
  if (readResults && readResults.hasOwnProperty(address)) {
    const value = readResults[address];
    // 处理undefined和null值
    if (value === undefined || value === null) {
      return '-';
    }
    return String(value);
  }
  
  return '-';
};

/**
 * 显示分组读取值
 * @param {string} address 变量地址
 * @param {string} groupId 分组ID
 * @param {Object} groupData 分组数据
 * @returns {string} 显示的值
 */
export const displayGroupReadValue = (address, groupId, groupData) => {
  if (!address || !groupId) return '-';
  
  if (groupData && 
      groupData[groupId] && 
      groupData[groupId].data && 
      groupData[groupId].data.hasOwnProperty(address)) {
    const value = groupData[groupId].data[address];
    // 处理undefined和null值
    if (value === undefined || value === null) {
      return '-';
    }
    return String(value);
  }
  
  return '-';
};

/**
 * 创建默认变量对象
 * @returns {Object} 默认变量对象
 */
export const createDefaultVariable = () => {
  return { name: '', address: '', value: '', description: '', type: 'UNKNOWN' };
};

/**
 * 验证变量地址
 * @param {string} address 变量地址
 * @returns {boolean} 是否有效
 */
export const validateVariableAddress = (address) => {
  if (!address || typeof address !== 'string') return false;
  return address.trim() !== '';
};

/**
 * 验证变量值
 * @param {*} value 变量值
 * @returns {Object} 验证结果 { isValid: boolean, message: string }
 */
export const validateVariableValue = (value) => {
  // 允许空值，空值会被转换为默认值
  return { isValid: true, message: '' };
};

export default {
  filterValidVariables,
  prepareWriteValue,
  isBooleanType,
  displayReadValue,
  displayGroupReadValue,
  createDefaultVariable,
  validateVariableAddress,
  validateVariableValue
};